/**
 * 用户控制器
 * 处理用户相关的HTTP请求
 */
const userService = require('../services/userService')
const ApiResponse = require('../utils/response')
const CustomException = require('../utils/customException')

class UserController {
	/**
	 * 用户登录
	 * @param {Object} req - Express请求对象
	 * @param {Object} res - Express响应对象
	 * @param {Function} next - Express下一个中间件函数
	 */
	async login(req, res, next) {
		try {
			const { username, password } = req.body

			// 验证请求参数
			if (!username || !password) {
				return res.status(400).json(ApiResponse.paramError('用户名和密码不能为空'))
			}

			// 调用服务层处理登录
			const result = await userService.login(username, password)

			// 返回成功响应
			res.json(ApiResponse.success(result))
		} catch (error) {
			// 处理登录失败
			if (error.message === '用户不存在' || error.message === '密码错误') {
				return res.status(400).json(ApiResponse.error('400', error.message))
			}

			// 其他错误交给全局错误处理中间件
			next(error)
		}
	}

	/**
	 * 用户注册
	 * @param {Object} req - Express请求对象
	 * @param {Object} res - Express响应对象
	 * @param {Function} next - Express下一个中间件函数
	 */
	async register(req, res, next) {
		try {
			const { username, password, phone } = req.body

			// 验证请求参数
			if (!username || !password) {
				return res.status(400).json(ApiResponse.paramError('用户名和密码不能为空'))
			}

			// 调用服务层处理注册
			const result = await userService.register({ username, password, phone })

			// 返回成功响应
			res.status(201).json(ApiResponse.success(result, '注册成功'))
		} catch (error) {
			// 处理注册失败
			if (error.message === '用户名已存在') {
				return res.status(400).json(ApiResponse.error('400', error.message))
			}

			// 其他错误交给全局错误处理中间件
			next(error)
		}
	}

	/**
	 * 获取当前登录用户信息
	 * @param {Object} req - Express请求对象
	 * @param {Object} res - Express响应对象
	 * @param {Function} next - Express下一个中间件函数
	 */
	async getCurrentUser(req, res, next) {
		try {
			// 从请求对象中获取用户ID（由认证中间件设置）
			const userId = req.user.id

			// 调用服务层获取用户信息
			const userInfo = await userService.getUserInfo(userId)

			// 返回成功响应
			res.json(ApiResponse.success(userInfo))
		} catch (error) {
			// 错误交给全局错误处理中间件
			next(error)
		}
	}

	/**
	 * 微信小程序登录
	 * @param {Object} req - Express请求对象
	 * @param {Object} res - Express响应对象
	 * @param {Function} next - Express下一个中间件函数
	 */
	async wxLogin(req, res, next) {
		try {
			const { code } = req.body
			console.log('code', code)

			// 验证请求参数
			if (!code) {
				return res.status(400).json(ApiResponse.paramError('code不能为空'))
			}

			// 调用服务层处理微信登录
			const result = await userService.wxLogin(code)

			// 返回成功响应
			res.json(ApiResponse.success(result))
		} catch (error) {
			// 处理登录失败
			if (error instanceof CustomException) {
				return res.status(400).json(ApiResponse.error(error.code, error.message))
			}

			// 其他错误交给全局错误处理中间件
			next(error)
		}
	}
}

module.exports = new UserController()
